home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / System7 tools / Frontier / Frontier SDK 2.1 / Toolkits / Applet Toolkit / appletresource.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-11  |  2.6 KB  |  150 lines  |  [TEXT/KAHL]

  1.  
  2. /*© Copyright 1988-1992 UserLand Software, Inc.  All Rights Reserved.*/
  3.  
  4.  
  5. #include "appletmemory.h"
  6. #include "appletresource.h"
  7.  
  8.  
  9.  
  10. boolean openresourcefile (bigstring fname, short vnum, short *rnum) {
  11.     
  12.     short resourcerefnum = -1;
  13.     short oldvnum;
  14.     
  15.     if (GetVol (nil, &oldvnum) != noErr)
  16.         return (false);
  17.     
  18.     if (SetVol (nil, vnum) != noErr)
  19.         goto error;
  20.     
  21.     resourcerefnum = OpenResFile (fname);
  22.     
  23.     if (ResError () == -39) { /*eof error, file has no resource fork, create one*/
  24.         
  25.         CreateResFile (fname);
  26.         
  27.         if (ResError () != noErr) /*failed to create resource fork*/
  28.             goto error;
  29.             
  30.         resourcerefnum = OpenResFile (fname);
  31.         }
  32.     
  33.     if (resourcerefnum != -1) /*it's open*/ {
  34.         
  35.         UseResFile (resourcerefnum); /*in case it was already open*/
  36.         
  37.         *rnum = resourcerefnum;
  38.         
  39.         SetVol (nil, oldvnum);
  40.         
  41.         return (true);
  42.         }
  43.     
  44.     error:
  45.     
  46.     SetVol (nil, oldvnum);
  47.     
  48.     closeresourcefile (resourcerefnum); /*checks for -1*/
  49.     
  50.     *rnum = -1;
  51.     
  52.     return (false);
  53.     } /*openresourcefile*/
  54.  
  55.  
  56. boolean closeresourcefile (short rnum) {
  57.     
  58.     if (rnum != -1) { /*resource file was successfully opened*/
  59.         
  60.         if (rnum > 2) /*not System or ROM*/
  61.             CloseResFile (rnum);
  62.         else
  63.             UpdateResFile (rnum); /*make sure map is consistent*/
  64.         
  65.         if (ResError () != noErr)
  66.             return (false);
  67.         }
  68.     
  69.     return (true);
  70.     } /*closeresourcefile*/
  71.     
  72.     
  73. boolean getresource (short rnum, OSType type, short id, long ct, void *p) {
  74.     
  75.     Handle h;
  76.     
  77.     h = Get1Resource (type, id);
  78.     
  79.     if (h == nil)
  80.         return (false);
  81.  
  82.     moveleft (*h, p, ct);
  83.         
  84.     return (true);
  85.     } /*getresource*/
  86.     
  87.     
  88. boolean putresource (short rnum, OSType type, short id, long ct, void *p) {
  89.  
  90.     Handle h;
  91.     
  92.     h = Get1Resource (type, id);
  93.     
  94.     if (h != nil) { /*resource already exists*/
  95.         
  96.         if (!sethandlecontents (p, ct, h)) /*couldn't increase size of handle*/
  97.             return (false);
  98.         
  99.         ChangedResource (h);
  100.         }
  101.     else {
  102.         
  103.         if (!newfilledhandle (p, ct, &h))
  104.             return (false);
  105.         
  106.         AddResource (h, type, id, "\p");
  107.         }
  108.     
  109.     return (ResError () == noErr);
  110.     } /*putresource*/
  111.     
  112.     
  113. boolean getresourcehandle (short rnum, OSType type, short id, Handle *hreturned) {
  114.     
  115.     Handle h;
  116.     
  117.     *hreturned = nil;
  118.     
  119.     h = Get1Resource (type, id);
  120.     
  121.     if (h == nil)
  122.         return (false);
  123.         
  124.     return (copyhandle (h, hreturned));
  125.     } /*getresource*/
  126.     
  127.     
  128. boolean putresourcehandle (short rnum, OSType type, short id, Handle h) {
  129.     
  130.     boolean fl;
  131.     
  132.     lockhandle (h);
  133.     
  134.     fl = putresource (rnum, type, id, GetHandleSize (h), *h);
  135.     
  136.     unlockhandle (h);
  137.     
  138.     return (fl);
  139.     } /*putresourcehandle*/
  140.     
  141.     
  142. boolean getresourcestring (short index, bigstring bs) {
  143.     
  144.     GetIndString (bs, 131, index);
  145.     
  146.     return (ResError () == noErr);
  147.     } /*getresourcestring*/
  148.     
  149.     
  150.